package com.xh3140.xwidget.app.chart.scales;

import android.graphics.Paint;

import androidx.annotation.NonNull;

import com.xh3140.xwidget.app.utils.PaintUtils;

/**
 * 刻度列表，用于控制坐标系的坐标轴刻度
 */
public abstract class AxisScales {
  // 开始值
  public final float start;

  // 间隔大小
  public final float interval;

  // 有效数量
  public final int count;

  // 初始索引
  public final int index;

  // 小数点后保留位数
  public final int scale;

  // 初始索引对应的值（频繁使用，优化）
  //public final float initial;

  // 末尾值（频繁使用，优化）
  //public final float end;

  public AxisScales(float start, float interval, int count, int index, int scale) {
    this.start = start;
    this.interval = interval;
    this.count = count;
    this.index = index;
    this.scale = scale;
    //this.initial = getValue(index);
    //this.end = getValue(count - 1);
  }

  public float getInitial() {
    return getValue(index);
  }

  public float getEnd() {
    return getValue(count - 1);
  }

  /**
   * 获取值
   *
   * @param index 索引值
   * @return 对应索引的值
   */
  public abstract float getValue(int index);

  /**
   * 获取文本
   *
   * @param index 索引值
   * @return 对应索引的文本
   */
  public abstract String getText(int index);

  /**
   * 获取最大宽度
   *
   * @param paint 画笔
   * @param index 开始索引值
   * @param count 数量
   */
  public int getMaximumWidth(@NonNull Paint paint, int index, int count) {
    int result = 0;
    int a = Math.max(0, index);
    int b = Math.min(index + count, this.count - 1);
    for (int i = a; i < b; ++i) {
      result = Math.max(result, PaintUtils.getTextBoundsWidth(paint, getText(i)));
    }
    return result;
  }
}
